<script>
	//   1. 创建一个空对象。
	// 2. 将这个新创建的对象的原型指向构造函数的prototype属性。
	// 3. 将构造函数的作用域赋给新创建的对象（因此this关键字指向这个新对象）。
	// 4. 执行构造函数内部的代码。
	// 5. 如果构造函数返回一个对象，则返回该对象；否则，返回新创建的对象。
	function myNew(constructor,...args) {
		let obj = {};
    // obj.__proto__ = constructor.prototype;
    // Object.setPrototypeOf(obj,constructor.prototype);
    obj =  Object.create(constructor.prototype);
    let res =  constructor.apply(obj,args);
    return typeof res === 'object' ? res : obj;
	}

  function fn(name,age) {
    this.name = name;
    this.age = age;
    // return {
    //   name: 'moniaca',
    //   age: 18
    // }
  }

	const p = myNew(fn,'zhangsan',18);
  console.log('p',p)
</script>
